;/***********************************************************************
; * Project: LPC18xx/43xx startup code
; *
; * Description: LPC18xx/43xx startup code
; *
; * Copyright(C) 2011, NXP Semiconductor
; * All rights reserved.
; *
; ***********************************************************************
; * Software that is described herein is for illustrative purposes only
; * which provides customers with programming information regarding the
; * products. This software is supplied "AS IS" without any warranties.
; * NXP Semiconductors assumes no responsibility or liability for the
; * use of the software, conveys no license or title under any patent,
; * copyright, or mask work right to the product. NXP Semiconductors
; * reserves the right to make changes in the software without
; * notification. NXP Semiconductors also make no representation or
; * warranty that such application will be suitable for the specified
; * use without further testing or modification.
; **********************************************************************/

; <h> Stack Configuration
;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Stack_Size      EQU     0x00000200

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000000

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

                PRESERVE8
                THUMB

; Vector Table Mapped to Address 0 at Reset

                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors

Sign_Value      EQU     0x5A5A5A5A

__Vectors       DCD     __initial_sp                    ; 0 Top of Stack
                DCD     Reset_Handler                   ; 1 Reset Handler
                DCD     NMI_Handler                     ; 2 NMI Handler
                DCD     HardFault_Handler               ; 3 Hard Fault Handler
                DCD     MemManage_Handler               ; 4 MPU Fault Handler
                DCD     BusFault_Handler                ; 5 Bus Fault Handler
                DCD     UsageFault_Handler              ; 6 Usage Fault Handler
                DCD     Sign_Value                      ; 7 Reserved
                DCD     UnHandled_Vector                ; 8 Reserved
                DCD     UnHandled_Vector                ; 9 Reserved
                DCD     UnHandled_Vector                ; 10 Reserved
                DCD     SVC_Handler                     ; 11 SVCall Handler
                DCD     DebugMon_Handler                ; 12 Debug Monitor Handler
                DCD     UnHandled_Vector                ; 13 Reserved
                DCD     PendSV_Handler                  ; 14 PendSV Handler
                DCD     SysTick_Handler                 ; 15 SysTick Handler

                ; External Interrupts
                DCD     DAC_IRQHandler                  ; 16 D/A Converter
                DCD     MX_CORE_IRQHandler              ; 17 M0/M4 IRQ handler (LPC43XX ONLY)
                DCD     DMA_IRQHandler                  ; 18 General Purpose DMA
                DCD     UnHandled_Vector                ; 19 Reserved
                DCD     FLASHEEPROM_IRQHandler          ; 20 ORed flash bank A, flash bank B, EEPROM interrupts
                DCD     ETH_IRQHandler                  ; 21 Ethernet
                DCD     SDIO_IRQHandler                 ; 22 SD/MMC
                DCD     LCD_IRQHandler                  ; 23 LCD
                DCD     USB0_IRQHandler                 ; 24 USB0
                DCD     USB1_IRQHandler                 ; 25 USB1
                DCD     SCT_IRQHandler                  ; 26 State Configurable Timer
                DCD     RIT_IRQHandler                  ; 27 Repetitive Interrupt Timer
                DCD     TIMER0_IRQHandler               ; 28 Timer0
                DCD     TIMER1_IRQHandler               ; 29 Timer1
                DCD     TIMER2_IRQHandler               ; 30 Timer2
                DCD     TIMER3_IRQHandler               ; 31 Timer3
                DCD     MCPWM_IRQHandler                ; 32 Motor Control PWM
                DCD     ADC0_IRQHandler                 ; 33 A/D Converter 0
                DCD     I2C0_IRQHandler                 ; 34 I2C0
                DCD     I2C1_IRQHandler                 ; 35 I2C1
                DCD     SPI_IRQHandler                  ; 36 SPI (LPC43XX ONLY)
                DCD     ADC1_IRQHandler                 ; 37 A/D Converter 1
                DCD     SSP0_IRQHandler                 ; 38 SSP0
                DCD     SSP1_IRQHandler                 ; 39 SSP1
                DCD     UART0_IRQHandler                ; 40 UART0
                DCD     UART1_IRQHandler                ; 41 UART1
                DCD     UART2_IRQHandler                ; 42 UART2
                DCD     UART3_IRQHandler                ; 43 UART3
                DCD     I2S0_IRQHandler                 ; 44 I2S0
                DCD     I2S1_IRQHandler                 ; 45 I2S1
                DCD     SPIFI_IRQHandler                ; 46 SPI Flash Interface
                DCD     SGPIO_IRQHandler                ; 47 SGPIO (LPC43XX ONLY)
                DCD     GPIO0_IRQHandler                ; 48 GPIO0
                DCD     GPIO1_IRQHandler                ; 49 GPIO1
                DCD     GPIO2_IRQHandler                ; 50 GPIO2
                DCD     GPIO3_IRQHandler                ; 51 GPIO3
                DCD     GPIO4_IRQHandler                ; 52 GPIO4
                DCD     GPIO5_IRQHandler                ; 53 GPIO5
                DCD     GPIO6_IRQHandler                ; 54 GPIO6
                DCD     GPIO7_IRQHandler                ; 55 GPIO7
                DCD     GINT0_IRQHandler                ; 56 GINT0
                DCD     GINT1_IRQHandler                ; 57 GINT1
                DCD     EVRT_IRQHandler                 ; 58 Event Router
                DCD     CAN1_IRQHandler                 ; 59 C_CAN1
                DCD     UnHandled_Vector                ; 60 Reserved
                DCD     VADC_IRQHandler                 ; 61 VADC
                DCD     ATIMER_IRQHandler               ; 62 ATIMER
                DCD     RTC_IRQHandler                  ; 63 RTC
                DCD     UnHandled_Vector                ; 64 Reserved
                DCD     WDT_IRQHandler                  ; 65 WDT
                DCD     UnHandled_Vector                ; 66 M0s
                DCD     CAN0_IRQHandler                 ; 67 C_CAN0
                DCD     QEI_IRQHandler                  ; 68 QEI


;               IF      :LNOT::DEF:NO_CRP
;               AREA    |.ARM.__at_0x02FC|, CODE, READONLY
;CRP_Key        DCD     0xFFFFFFFF
;               ENDIF

                AREA    |.text|, CODE, READONLY

; Reset Handler

Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0

                LDR     R0, =__main
                BX      R0
                ENDP

; Dummy Exception Handlers (infinite loops which can be modified)

NMI_Handler     PROC
                EXPORT  NMI_Handler               [WEAK]
                B       .
                ENDP
HardFault_Handler\
                PROC
                EXPORT  HardFault_Handler         [WEAK]
                B       .
                ENDP
MemManage_Handler\
                PROC
                EXPORT  MemManage_Handler         [WEAK]
                B       .
                ENDP
BusFault_Handler\
                PROC
                EXPORT  BusFault_Handler          [WEAK]
                B       .
                ENDP
UsageFault_Handler\
                PROC
                EXPORT  UsageFault_Handler        [WEAK]
                B       .
                ENDP
SVC_Handler     PROC
                EXPORT  SVC_Handler               [WEAK]
                B       .
                ENDP
DebugMon_Handler\
                PROC
                EXPORT  DebugMon_Handler          [WEAK]
                B       .
                ENDP
PendSV_Handler  PROC
                EXPORT  PendSV_Handler            [WEAK]
                B       .
                ENDP
SysTick_Handler PROC
                EXPORT  SysTick_Handler           [WEAK]
                B       .
                ENDP
UnHandled_Vector        PROC
                EXPORT  UnHandled_Vector          [WEAK]
                B       .
                ENDP

Default_Handler PROC

                EXPORT DAC_IRQHandler           [WEAK]
                EXPORT MX_CORE_IRQHandler       [WEAK]
                EXPORT DMA_IRQHandler           [WEAK]
                EXPORT FLASHEEPROM_IRQHandler   [WEAK]
                EXPORT ETH_IRQHandler           [WEAK]
                EXPORT SDIO_IRQHandler          [WEAK]
                EXPORT LCD_IRQHandler           [WEAK]
                EXPORT USB0_IRQHandler          [WEAK]
                EXPORT USB1_IRQHandler          [WEAK]
                EXPORT SCT_IRQHandler           [WEAK]
                EXPORT RIT_IRQHandler           [WEAK]
                EXPORT TIMER0_IRQHandler        [WEAK]
                EXPORT TIMER1_IRQHandler        [WEAK]
                EXPORT TIMER2_IRQHandler        [WEAK]
                EXPORT TIMER3_IRQHandler        [WEAK]
                EXPORT MCPWM_IRQHandler         [WEAK]
                EXPORT ADC0_IRQHandler          [WEAK]
                EXPORT I2C0_IRQHandler          [WEAK]
                EXPORT I2C1_IRQHandler          [WEAK]
                EXPORT SPI_IRQHandler           [WEAK]
                EXPORT ADC1_IRQHandler          [WEAK]
                EXPORT SSP0_IRQHandler          [WEAK]
                EXPORT SSP1_IRQHandler          [WEAK]
                EXPORT UART0_IRQHandler         [WEAK]
                EXPORT UART1_IRQHandler         [WEAK]
                EXPORT UART2_IRQHandler         [WEAK]
                EXPORT UART3_IRQHandler         [WEAK]
                EXPORT I2S0_IRQHandler          [WEAK]
                EXPORT I2S1_IRQHandler          [WEAK]
                EXPORT SPIFI_IRQHandler         [WEAK]
                EXPORT SGPIO_IRQHandler         [WEAK]
                EXPORT GPIO0_IRQHandler         [WEAK]
                EXPORT GPIO1_IRQHandler         [WEAK]
                EXPORT GPIO2_IRQHandler         [WEAK]
                EXPORT GPIO3_IRQHandler         [WEAK]
                EXPORT GPIO4_IRQHandler         [WEAK]
                EXPORT GPIO5_IRQHandler         [WEAK]
                EXPORT GPIO6_IRQHandler         [WEAK]
                EXPORT GPIO7_IRQHandler         [WEAK]
                EXPORT GINT0_IRQHandler         [WEAK]
                EXPORT GINT1_IRQHandler         [WEAK]
                EXPORT EVRT_IRQHandler          [WEAK]
                EXPORT CAN1_IRQHandler          [WEAK]
                EXPORT VADC_IRQHandler          [WEAK]
                EXPORT ATIMER_IRQHandler        [WEAK]
                EXPORT RTC_IRQHandler           [WEAK]
                EXPORT WDT_IRQHandler           [WEAK]
                EXPORT CAN0_IRQHandler          [WEAK]
                EXPORT QEI_IRQHandler           [WEAK]

DAC_IRQHandler
MX_CORE_IRQHandler
DMA_IRQHandler
FLASHEEPROM_IRQHandler
ETH_IRQHandler
SDIO_IRQHandler
LCD_IRQHandler
USB0_IRQHandler
USB1_IRQHandler
SCT_IRQHandler
RIT_IRQHandler
TIMER0_IRQHandler
TIMER1_IRQHandler
TIMER2_IRQHandler
TIMER3_IRQHandler
MCPWM_IRQHandler
ADC0_IRQHandler
I2C0_IRQHandler
I2C1_IRQHandler
SPI_IRQHandler
ADC1_IRQHandler
SSP0_IRQHandler
SSP1_IRQHandler
UART0_IRQHandler
UART1_IRQHandler
UART2_IRQHandler
UART3_IRQHandler
I2S0_IRQHandler
I2S1_IRQHandler
SPIFI_IRQHandler
SGPIO_IRQHandler
GPIO0_IRQHandler
GPIO1_IRQHandler
GPIO2_IRQHandler
GPIO3_IRQHandler
GPIO4_IRQHandler
GPIO5_IRQHandler
GPIO6_IRQHandler
GPIO7_IRQHandler
GINT0_IRQHandler
GINT1_IRQHandler
EVRT_IRQHandler
CAN1_IRQHandler
VADC_IRQHandler
ATIMER_IRQHandler
RTC_IRQHandler
WDT_IRQHandler
CAN0_IRQHandler
QEI_IRQHandler

                B       .

                ENDP

                ALIGN

; User Initial Stack & Heap

                IF      :DEF:__MICROLIB

                EXPORT  __initial_sp
                EXPORT  __heap_base
                EXPORT  __heap_limit

                ELSE

                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap
__user_initial_stackheap

                LDR     R0, =  Heap_Mem
                LDR     R1, =(Stack_Mem + Stack_Size)
                LDR     R2, = (Heap_Mem +  Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR

                ALIGN

                ENDIF

                END

